﻿using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Navigation;
using Contratos;
using MenuControl;
using Presentadores;

namespace MJD
{
    /// <summary>
    /// Code behind del main page
    /// </summary>
    public partial class MainPage : UserControl, IMainPage
    {
        #region Atributos

        /// <summary> Objeto que tiene la definicion del presentador de la vista </summary>
        private PresentadorMainPage _presentador;
  
        #endregion

        #region Construtor
        
        /// <summary> Constructor de la pagina </summary>
        public MainPage()
        {
            InitializeComponent();
            _presentador = new PresentadorMainPage(this);
        }

        #endregion

        #region Eventos

        /// <summary> Metodo que se ejecuta cuando ya la pagina se ha cargado </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void OnLoaded(object sender, RoutedEventArgs e)
        {

        }


        /// <summary> Metodo que se ejecuta cuando se carga el frame</summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void ContentFrameNavigated(object sender, NavigationEventArgs e)
        {

        }


        /// <summary> Metodo que se ejecuta cuando ocurrio un error al cargar el frame </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void ContentFrameNavigationFailed(object sender, NavigationFailedEventArgs e)
        {
            e.Handled = true;
            ChildWindow errorWin = new ErrorWindow(e.Uri);
            errorWin.Show();
        }


        /// <summary> Metodo que se ejecuta cuando se le da click a un item del menu principal </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void MenuItemClick(object sender, RoutedEventArgs e)
        {
            _presentador.ClickItemMenu(((MenuItem)sender).Name);
        }


        /// <summary> Metodo que se ejecuta cuando se le da click a un item del menu principal </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void MenuBarClick(object sender, MouseButtonEventArgs e)
        {

        }


        /// <summary> Metodo que se ejecuta cuando se le da click al link de cerrar session</summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void CerrarSessionClick(object sender, RoutedEventArgs e)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region Propiedades

        /// <summary> Metodo que redirecciona a la ruta indicada </summary>
        /// <param name="ruta">ruta a la cual se redireccionara</param>
        public void Redireccionar(string ruta)
        {

            ContentFrame.Navigate(new Uri("/" + ruta, UriKind.Relative));
        }

        /// <summary> Metodo que muestra un mensaje de notificacion</summary>
        /// <param name="mensaje">mensaje a mostrar</param>
        public void MostrarMensajeNotificacion(string mensaje)
        {
            throw new NotImplementedException();
        }

        /// <summary> Metodo que muestra un mensaje de error </summary>
        /// <param name="mensaje">mensaje a mostrar</param>
        public void MostrarMensajeError(string mensaje)
        {
            throw new NotImplementedException();
        }

        /// <summary> Metodo que muestra un mensaje de confirmacion </summary>
        /// <param name="mensaje">mensaje a mostrar</param>
        public void MostrarMensajeConfirmacion(string mensaje)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
